/*
 * Copyright 2007-2010 Jeremy Brown.
 *
 * Licensed under the Apache License, Version 2.0 (the "License")
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @author <a href="http://jeremy-brown.com">Jeremy Brown</a>
 */


package groovy.prefuse.factory

import prefuse.data.Table

public class RowFactory extends AbstractFactory
{
	boolean isLeaf()
	{
		return true
	}
    
    public Object newInstance(FactoryBuilderSupport builder, Object name, Object value, Map attributes) throws InstantiationException, IllegalAccessException
	{
		if(value instanceof List)
		{
			return value
		}
		else if(attributes.size() > 0)
		{
			def values = [:]
			attributes.each{key, val->
				values.put(key, val)
			}
			values.each{key, val->
				attributes.remove(key)
			}
			return values
		}
		else if(value != null)
		{
			return [value]
		}
	}

    public void setParent(FactoryBuilderSupport builder, Object parent, Object child) 
	{
		if(!(parent instanceof Table))
		{
			return
		}
		
		if(child instanceof List)
		{
			def row = parent.addRow()
			child.eachWithIndex{data, columnIndex->
				parent.set(row, columnIndex, data)
			}
		}
		else if(child instanceof Map)
		{
			def row = parent.addRow()
			child.each{columnName, data->
				parent.set(row, columnName, data)
			}
		}
    }
}
